package ua.com.jpy.services.auth.mongo.customer;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.GrantedAuthorityImpl;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Component;

import ua.com.jpy.entity.customer.Customer;
import ua.com.jpy.entity.customer.dao.ICustomerDao;
import ua.com.jpy.entity.role.Role;

/**
 * @author LSD25
 *
 */
@SuppressWarnings("deprecation")
@Component
public class MongoUserDetailService implements UserDetailsService {
	
	private static final Log log = LogFactory.getLog(MongoUserDetailService.class);
	
	private static final String ROLE_USER = "ROLE_USER";
	
	private static final String ROLE_ADMIN = "ROLE_ADMIN";
	
	@Autowired
	private ICustomerDao customerDao;

	@Override
	public UserDetails loadUserByUsername(String username) {
		Customer customer = customerDao.find(username);
		if(customer == null) {
			return null;
		}
		List<Role> roles = customer.getRoles();
		Role role = roles.get(0);
		return new User(customer.getLogin(), customer.getPassword(), customer.isActive(), true, true, true, getAuthorities(role.getRoleInt()));
	}
	
	public Collection<GrantedAuthority> getAuthorities(Integer access) {
		List<GrantedAuthority> authList = new ArrayList<GrantedAuthority>();
		log.debug("Grant ROLE_USER to this user");
		authList.add(new GrantedAuthorityImpl(ROLE_USER));
		if (access.compareTo(1) == 0) {
			log.debug("Grant ROLE_ADMIN to this user");
			authList.add(new GrantedAuthorityImpl(ROLE_ADMIN));
		}
		return authList;
	}
	
}
